/**
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.apache.aries.samples.ariestrader.web.prims;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.aries.samples.ariestrader.util.*;

/**
 *
 * PingHTTPSession1 - SessionID tests fundamental HTTP session functionality 
 * by creating a unique session ID for each individual user. The ID is stored 
 * in the users session and is accessed and displayed on each user request.
 *
 */
public class PingSession1 extends HttpServlet {
	private static int count;
	// For each new session created, add a session ID of the form "sessionID:" + count
	private static String initTime;
	private static int hitCount;
/**
 * forwards post requests to the doGet method
 * Creation date: (11/6/2000 10:52:39 AM)
 * @param res javax.servlet.http.HttpServletRequest
 * @param res2 javax.servlet.http.HttpServletResponse
 */
public void doPost(HttpServletRequest req, HttpServletResponse res)
	throws ServletException, IOException {
	doGet(req, res);
}
/**
* this is the main method of the servlet that will service all get requests.
* @param request HttpServletRequest
* @param responce HttpServletResponce
**/
public void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
	HttpSession session = null;
	try
	{
		try
		{
			//get the users session, if the user does not have a session create one.
			session = request.getSession(true);
		}
		catch (Exception e)
		{
			Log.error(e, "PingSession1.doGet(...): error getting session"); 
			//rethrow the exception for handling in one place.
			throw e;
		}

		// Get the session data value
		Integer ival = (Integer) session.getAttribute("sessiontest.counter");
		//if their is not a counter create one.
		if (ival == null)
		{
			ival = new Integer(count++);
			session.setAttribute("sessiontest.counter", ival);
		}
		String SessionID = "SessionID:" + ival.toString();

		// Output the page
		response.setContentType("text/html");
		response.setHeader("SessionKeyTest-SessionID", SessionID);

		PrintWriter out = response.getWriter();
		out.println(
			"<html><head><title>HTTP Session Key Test</title></head><body><HR><BR><FONT size=\"+2\" color=\"#000066\">HTTP Session Test 1: Session Key<BR></FONT><FONT size=\"+1\" color=\"#000066\">Init time: "
				+ initTime
				+ "</FONT><BR><BR>");
                hitCount++;
		out.println(
			"<B>Hit Count: "
				+ hitCount
				+ "<BR>Your HTTP Session key is "
				+ SessionID
				+ "</B></body></html>"); 
	}
	catch (Exception e)
	{
		//log the exception
		Log.error(e, "PingSession1.doGet(..l.): error."); 
		//set the server response to 500 and forward to the web app defined error page 
		response.sendError(
			500, 
			"PingSession1.doGet(...): error. " + e.toString()); 
	}
}
/** 
 * returns a string of information about the servlet
 * @return info String: contains info about the servlet
 **/

public String getServletInfo()
{
	return "HTTP Session Key: Tests management of a read only unique id";
}
/**
* called when the class is loaded to initialize the servlet
* @param config ServletConfig:
**/
public void init(ServletConfig config) throws ServletException {
	super.init(config);
	count = 0;
	hitCount = 0;
	initTime = new java.util.Date().toString();

}
}